package com.demo.java.OD301_350.OD315;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【根据某条件聚类最少交换次数(B卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146105972
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 读取整数数组
        String[] numsStr = scanner.nextLine().split(" ");
        int[] nums = new int[numsStr.length];
        for (int i = 0; i < numsStr.length; i++) {
            nums[i] = Integer.parseInt(numsStr[i]);
        }

        // 读取整数 K
        int k = Integer.parseInt(scanner.nextLine());

        // 将数组中小于 K 的元素标记为 1，大于等于 K 的元素标记为 0
        int[] newNums = new int[nums.length];
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] < k) {
                newNums[i] = 1;
            } else {
                newNums[i] = 0;
            }
        }

        // 计算 newNums 数组中 1 的总数 m
        int n = newNums.length;
        int m = 0;
        for (int num : newNums) {
            m += num;
        }

        // 使用滑动窗口计算连续的 1 的最大数量
        int[] dp = new int[n];
        for (int i = 0; i < n; i++) {
            int sum = 0;
            for (int j = i; j < i + m; j++) {
                if (j < n) {
                    sum += newNums[j];
                }
            }
            dp[i] = sum;
        }

        // 计算最小交换次数，最少交换次数为 m - max(dp)
        int result = m - max(dp);
        System.out.println(result);

        scanner.close();
    }

    // 获取数组中的最大值
    private static int max(int[] arr) {
        int max = Integer.MIN_VALUE;
        for (int num : arr) {
            if (num > max) {
                max = num;
            }
        }
        return max;
    }
}